// category.js
const api = require('../../utils/api')

Page({
  data: {
    keyword: '',
    categories: [],
    currentCategory: 0,
    products: [],
    loading: false,
    pageNum: 1,
    pageSize: 10,
    hasMore: true
  },

  onLoad() {
    this.loadCategories()
  },

  // 加载分类数据
  async loadCategories() {
    try {
      wx.showLoading({
        title: '加载中...',
        mask: true
      })

      const res = await api.getCategories()
      console.log('分类数据:', res)
      
      if (res && res.success && res.data && res.data.length > 0) {
        this.setData({
          categories: res.data
        })
        // 加载第一个分类的商品
        if (res.data.length > 0) {
          this.setData({ currentCategory: 0 })
          this.loadCategoryProducts(res.data[0].id)
        }
      } else {
        console.log('未找到分类数据，尝试初始化分类')
        // 尝试初始化分类
        const initRes = await api.initCategories()
        if (initRes && initRes.success && initRes.data) {
          this.setData({
            categories: initRes.data
          })
          // 加载第一个分类的商品
          if (initRes.data.length > 0) {
            this.setData({ currentCategory: 0 })
            this.loadCategoryProducts(initRes.data[0].id)
          }
        } else {
          wx.showToast({
            title: '暂无分类数据',
            icon: 'none'
          })
        }
      }
    } catch (error) {
      console.error('加载分类失败:', error)
      wx.showToast({
        title: '加载分类失败',
        icon: 'none'
      })
    } finally {
      wx.hideLoading()
    }
  },

  // 加载分类商品
  async loadCategoryProducts(categoryId, isLoadMore = false) {
    if (this.data.loading) return
    
    try {
      this.setData({ loading: true })
      const { pageNum, pageSize } = this.data
      
      const res = await api.getProductsByCategory(categoryId, {
        page: isLoadMore ? pageNum + 1 : 1,
        size: pageSize
      })
      
      console.log('分类商品:', res)
      
      if (res && res.data) {
        const products = res.data.content || []
        
        this.setData({
          products: isLoadMore ? [...this.data.products, ...products] : products,
          pageNum: isLoadMore ? pageNum + 1 : 1,
          hasMore: products.length === pageSize,
          loading: false
        })
      } else {
        this.setData({
          products: [],
          hasMore: false,
          loading: false
        })
      }
    } catch (error) {
      console.error('加载商品失败:', error)
      wx.showToast({
        title: '加载商品失败',
        icon: 'none'
      })
      this.setData({ loading: false })
    }
  },

  // 切换分类
  switchCategory(e) {
    const index = e.currentTarget.dataset.index
    const categoryId = this.data.categories[index].id
    this.setData({
      currentCategory: index,
      products: [],
      pageNum: 1,
      hasMore: true
    })
    this.loadCategoryProducts(categoryId)
  },

  // 搜索输入
  onInput(e) {
    this.setData({
      keyword: e.detail.value
    })
  },

  // 清除搜索
  clearSearch() {
    this.setData({
      keyword: ''
    })
  },

  // 执行搜索
  async onSearch() {
    const { keyword } = this.data
    if (!keyword.trim()) {
      return
    }
    
    try {
      wx.showLoading({
        title: '搜索中...',
        mask: true
      })
      
      const res = await api.searchProducts(keyword)
      console.log('搜索结果:', res)
      
      if (res && res.success && res.data) {
        // 跳转到搜索结果页面，使用decodeURIComponent避免重复编码
        wx.navigateTo({
          url: `/pages/search/search?keyword=${keyword}`
        })
      } else {
        wx.showToast({
          title: '搜索失败',
          icon: 'none'
        })
      }
    } catch (error) {
      console.error('搜索失败:', error)
      wx.showToast({
        title: '搜索失败',
        icon: 'none'
      })
    } finally {
      wx.hideLoading()
    }
  },

  // 跳转到商品详情
  goToProduct(e) {
    const id = e.currentTarget.dataset.id
    wx.navigateTo({
      url: `/pages/product/product?id=${id}`
    })
  },

  // 下拉刷新
  async onPullDownRefresh() {
    const categoryId = this.data.categories[this.data.currentCategory]?.id
    if (categoryId) {
      await this.loadCategoryProducts(categoryId)
    }
    wx.stopPullDownRefresh()
  },

  // 上拉加载更多
  onReachBottom() {
    if (!this.data.hasMore || this.data.loading) return
    
    const categoryId = this.data.categories[this.data.currentCategory]?.id
    if (categoryId) {
      this.loadCategoryProducts(categoryId, true)
    }
  }
}) 